//
//  LYCLoginViewModel.swift
//  新浪微博
//
//  Created by liuyanchi on 16/7/31.
//  Copyright © 2016年 liuyanchi. All rights reserved.
//

import UIKit

class LYCLoginViewModel: NSObject {
    
    // MARK:-- 创建一个单例,方便获取
    static let shareInstance:LYCLoginViewModel = LYCLoginViewModel()
    
    
    
    // 定义一个模型属性
    var model: LYCUserInfoModel?
    
    // 计算性属性,没有分配空间
    var access_token: String? {
        
        return model?.access_token
        
    }
    
    // MARK:-- 定义一个判断model中access_token是否有值的属性
    
    var isLogin: Bool{
    
        return model?.access_token == nil ? false : true
        
    }
    
    // 重写init方法
       private override init() {
        
        model = LYCUserInfoModel.readModel()
        
        
    }
    
    // 网络加载Token
    func loadToken(code: String,success: ()->(),failed:(message: String)->()){
        
        // 1.获取urlstring
        let urlString = "https://api.weibo.com/oauth2/access_token"
        
        // 2.POST请求
        /*
        client_id	true	string	申请应用时分配的AppKey。
        client_secret	true	string	申请应用时分配的AppSecret。
        grant_type	true	string	请求的类型，填写authorization_code
        
        grant_type为authorization_code时
        必选	类型及范围	说明
        code	true	string	调用authorize获得的code值。
        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
        
        */
        
        let params = ["client_id":AppKey,
            
            "client_secret":AppSecret,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":RedrectURL
        ]
        
        LYCHTTPClient.shareInstance.request(.POST, URLString: urlString, parameters: params, progress: nil, success: { (_, JSON) -> Void in
            
            printLog(JSON)
            
            // 1.先解包
            guard let json = JSON else{
                
                return
                
            }
            
            // 2.把NSObject转成字典类型
            let dict = json as! [String : NSObject]
            
            // 3.字典转模型
            
            let model = LYCUserInfoModel(dict: dict)
            
            // 加载请求个人数据
            
            self.loadPersonalInfo(model, success: success, failed: failed)
            
            
            
            
            }) { (_ , error) -> Void in
                
                // 失败信息提示
                failed(message: error.description)
                
        }
        
        
    }
    
    
    
    // MARK:-- 加载个人数据
    
    private func loadPersonalInfo(model: LYCUserInfoModel,success: ()->(),failed:(message:String)->()){
        
        // 1.url
        let urlString = "https://api.weibo.com/2/users/show.json"
        
        // 2.拼接参数
        guard let token = model.access_token,uid = model.uid else{
            
            printLog("token和uid必须要有")
            return
        }
        
        let params = ["access_token": token,"uid": uid]
        
        // 3.查看请求方式
        LYCHTTPClient.shareInstance.request(.GET, URLString: urlString, parameters: params, progress: nil, success: { (_, JSON) -> Void in
            
            guard let json = JSON as?[String: NSObject] else{
                
                return
                
            }
            
            model.screen_name = json["screen_name"] as? String
            
            model.profile_image_url = json["profile_image_url"] as? String
            
            // 在归档之前,给viewModel的model进行赋值
            self.model = model
            
            // 进行归档保存
            model.saveModel()
            
            success()
            
            
            }) { (_, error) -> Void in
                
                //                SVProgressHUD.showErrorWithStatus(error.description)
                
                failed(message: error.description)
                
        }
        
    }
}



